テクニカル Q&A

QTMTB 50 - QuickTime 3 ムービーの音声データの再生 (1998 年 11 月 9 日)


Q: QuickTime 3 の関数、MCDoAction を使って、非常に短い時間、例えば 0.10 秒だけムービーを再生し、停止させたいと思っています。ビデオデータの 0.10 秒間の再生はうまくいくのですが、音声データが約 0.30〜0.50 秒も再生されてしまいます。MCDoAction を使って、ムービーの音声データをこうした短い時間だけ再生することはできるのでしょうか。

A: 0.10 秒後のムービー停止後に起こる遅延は、QuickTime 3 が音声停止時に「音声 FIFO キュー」の内容も出力してしまうことに原因があると考えられます。しかし、これを行わないと、あらゆるムービーの再生で最後の部分の音声を聞くことができなくなってしまいます (ボタンクリックなど、非常に短い音声のムービーの場合、特に困ったことになります)。

説明しましょう。Macintosh には、ハードウェア FIFO (First In/First Out Queue = 先入れ先出しキュー) があり、音声ハードウェアがスピーカーに出力する直前の音声サンプルが置かれています。普通これはサイズが非常に小さいので、Macintosh では「停止の遅延」に気付くことはありません。しかし Windows では、QuickTime 3 はハードウェア FIFO をソフトウェアバッファでエミュレートしています。オーディオドライバから DirectSound サポートが利用可能な場合、このバッファのデフォルトサイズは約 60 ミリ秒です。ドライバレベルで DirectSound が利用できないと、QuickTime は Windows の waveOut API を使わざるを得ないことになります。この API は非常に貧弱で、待ち時間が大きな問題です。そのため、この場合の FIFO のデフォルトサイズは約 0.25 秒も取っています (そして、ご指摘の通り「停止の遅延」がとても目立つようになるのです)。

さいわい、Windows の FIFO サイズは変更できます。[QuickTime] コントロールパネルを開き、[サウンド出力] ポップアップを選択してください。「waveOut」と「DirectSound」のどちらを使用しているか表示されています。waveOut が選択されている場合は、DirectSound の方を選択してください (DirectSound が一覧に表示されている場合)。それから (どちらのデバイスを選択していた場合でも) [オプション] ボタンを押します。[DirectSound オプション] ダイアログには、FIFO サイズをミリ秒単位で入力できます。[waveOut オプション] ダイアログでは、waveOut の FIFO バッファの個数と、各バッファのサイズをミリ秒単位で入力できます。音声が途切れない範囲で、FIFO をできるかぎり小さくしてください (音声再生テストでは、FIFO サイズの変更後は毎回 MoviePlayer の再起動が必要です)。これは、音声の途切れと遅延の間のトレードオフを図っているわけで、音声ハードウェア/ドライバの機能に応じて、両者の間で妥協点を見つけなければならないことを覚えておいてください。


-- Scott Kuechle
Worldwide Developer Technical Support

テクニカル Q&A | 目次

To contact us, please use the Contact Us page.